namespace System.Xml.Serialization
{
    using Internal;

    public abstract class XmlRuntimeSerializer : XmlAbstractSerializer
    {
        public abstract void Serialize(object value, IXmlPropertyWriter writer, string propertyName);
        public abstract object Deserialize(IXmlPropertyReader reader, string propertyName);

        public static IXmlSerializer<bool> Boolean { get { return BooleanSerializer.Instance; } }
        public static IXmlSerializer<byte> Byte { get { return ByteSerializer.Instance; } }

        [CLSCompliant(false)]
        public static IXmlSerializer<SByte> SByte { get { return SByteSerializer.Instance; } }
        public static IXmlSerializer<Int16> Int16 { get { return Int16Serializer.Instance; } }
        public static IXmlSerializer<int> Int32 { get { return Int32Serializer.Instance; } }
        public static IXmlSerializer<Int64> Int64 { get { return Int64Serializer.Instance; } }

        [CLSCompliant(false)]
        public static IXmlSerializer<UInt16> UInt16 { get { return UInt16Serializer.Instance; } }

        [CLSCompliant(false)]
        public static IXmlSerializer<UInt32> UInt32 { get { return UInt32Serializer.Instance; } }

        [CLSCompliant(false)]
        public static IXmlSerializer<ulong> UInt64 { get { return UInt64Serializer.Instance; } }

        public static IXmlSerializer<float> Float { get { return FloatSerializer.Instance; } }
        public static IXmlSerializer<double> Double { get { return DoubleSerializer.Instance; } }
        public static IXmlSerializer<Decimal> Decimal { get { return DecimalSerializer.Instance; } }
        public static IXmlSerializer<string> String { get { return StringSerializer.Instance; } }
        public static IXmlSerializer<Guid> Guid { get { return GuidSerializer.Instance; } }
        public static IXmlSerializer<object> Enum { get { return EnumSerializer.Instance; } }
    }
}
